import type { RouteRecordRaw } from 'vue-router'
function loadLocalRoutes() {
  const localRoutes: RouteRecordRaw[] = []
  // 1.1读取router/main所有ts文件 自动化的东西
  const files: Record<string, any> = import.meta.glob('@/router/main/**/*.ts', {
    eager: true
  })
  // console.log(files)
  for (const key in files) {
    const module = files[key]
    // 拿到每个文件导出的对象
    // console.log(module.default)
    localRoutes.push(module.default)
  }
  return localRoutes
}
export let firstMenu: any = null //全局的记录第一个菜单
// firstMenu.url
// 6,动态添加路由
export function mapMenusToRoutes(userMenus: any[]) {
  // 根据菜单动态添加路由。
  // 1，获取菜单（userMenu）-代码写的位置
  // 2，动态获取所有路由对象（现在在独立的文件中）放在数组中，方便匹配
  // 3，根据菜单匹配正确路由， router.addRoute('main',xxx)
  // 所有路由  可以写死 （老师加入了自动化，难度上去啦，哈哈哈）
  //  1，加载本地路由
  const localRoutes = loadLocalRoutes()
  // console.log(localRoutes)
  // 2 ,根据菜单匹配路由数组得到有的路径，router.addRoute('main',xxx)
  const routes: RouteRecordRaw[] = []
  for (const menu of userMenus) {
    for (const submenu of menu.children) {
      const route = localRoutes.find((item) => item.path === submenu.url)
      //  if(submenu.url === ){

      //  }
      if (route) {
        // router.addRoute('main', route)
        // 1,给顶层菜单添加重定向功能 只需要添加一次即可
        // 手动多添加一个路由
        if (
          !routes.find((item) => {
            item.path === menu.path
          })
        ) {
          routes.push({ path: menu.url, redirect: route.path })
        }
        // 我们要添加的路由对象push到了一数组中
        // 2添加二级菜单路由
        routes.push(route)
      }
      if (!firstMenu && route) firstMenu = submenu
    }
  }
  // 只负责映射
  return routes
}
/**

 * @param path 需要匹配的路径
 * @param userMenu 所有的菜单
 *  返回当前菜单
 */

export function mapPathToMenu(path: string, userMenu: any[]) {
  for (const menu of userMenu) {
    for (const submenu of menu.children) {
      if (submenu.url === path) {
        return submenu
      }
    }
  }
  return undefined
}
/**
 *
 * @param path 需要匹配的路径
 * @param userMenu 所有的菜单
 *  根据路径返回面包屑
 */
interface IBreadcrumbs {
  name: string
  path?: string
}
export function mapMenusToBreadcrumbs(path: string, userMenu: any[]) {
  const breadcrumbs: IBreadcrumbs[] = []
  for (const menu of userMenu) {
    for (const submenu of menu.children) {
      if (submenu.url === path) {
        breadcrumbs.push({ name: menu.name, path: menu.url })
        breadcrumbs.push({ name: submenu.name, path: submenu.url })
      }
    }
  }

  return breadcrumbs
}
// 菜单取到id
export function mapMenusToId(menuList: any[]) {
  const ids: number[] = []
  function recurseGetId(menus: any[]) {
    for (const item of menus) {
      if (item.children) {
        // 有子菜单
        recurseGetId(item.children)
      } else {
        // 找到最底层的id
        ids.push(item.id)
      }
    }
  }
  recurseGetId(menuList)
  return ids
}
/**
 *从菜单映射到按钮的权限 三层 递归
 * @param menuList 菜单列表
 * @requires 权限的数组（字符串数组）
 */
export function mapMenuListToPermissons(menuList: any[]) {
  const permissions: string[] = []
  function recurGetPermission(menus: any[]) {
    for (const item of menus) {
      if (item.type === 3) {
        permissions.push(item.permission)
      } else {
        recurGetPermission(item.children ?? [])
      }
    }
  }
  recurGetPermission(menuList)
  return permissions
}
